package servlet;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.award.jdbc.dao.JdbcDao;
import com.award.model.User;

public class updateUserInformation extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String path = this.getServletContext().getRealPath("/");
		// 判断上传表单是否为multipart/form-data类型
		HttpSession session = request.getSession();
		User user = (User) session.getAttribute("user"); // 在登录时将 User 对象放入了 会话
		// 中
		String userImgURL = null;
		if (ServletFileUpload.isMultipartContent(request)) {

			try {
				// 1. 创建DiskFileItemFactory对象，设置缓冲区大小和临时文件目录
				DiskFileItemFactory factory = new DiskFileItemFactory();
				// System.out.println(System.getProperty("java.io.tmpdir"));//默认临时文件夹

				// 2. 创建ServletFileUpload对象，并设置上传文件的大小限制。
				ServletFileUpload sfu = new ServletFileUpload(factory);
				// 限制图片大小为2Mb
				sfu.setSizeMax(2 * 1024 * 1024);// 以byte为单位 不能超过10M 1024byte =
				// 1kb 1024kb=1M 1024M = 1G
				sfu.setHeaderEncoding("utf-8");

				// 3.
				// 调用ServletFileUpload.parseRequest方法解析request对象，得到一个保存了所有上传内容的List对象。
				List<FileItem> fileItemList = sfu.parseRequest(request);
				Iterator<FileItem> fileItems = fileItemList.iterator();

				// 4. 遍历list，每迭代一个FileItem对象，调用其isFormField方法判断是否是上传文件
				while (fileItems.hasNext()) {
					FileItem fileItem = fileItems.next();
					// 普通表单元素
					if (fileItem.isFormField()) {
						String name = fileItem.getFieldName();// name属性值
						String value = fileItem.getString("utf-8");// name对应的value值
						switch (name) {
						case "username":
							user.setUsername(value);
							break;
						case "name":
							user.setName(value);
							break;
						case "password":
							user.setPassword(value);
							break;
						case "address":
							user.setAddress(value);
							break;
						}
						System.out.println(name + " = " + value);
					}
					// <input type="file">的上传文件的元素
					else {
						String fileName = fileItem.getName();// 文件名称
						System.out.println("原文件名：" + fileName);// Koala.jpg

						String suffix = fileName.substring(fileName
								.lastIndexOf('.'));
						System.out.println("扩展名：" + suffix);// .jpg

						// 删除原有头像
						if (!user.getUserImgURL().equals(
								"./images/traveller.jpg")) {
							File fileOringinal = new File(path + "/"
									+ user.getUserImgURL().substring(1));
							fileOringinal.delete();
						}

						// 新文件名（唯一）
						String newFileName = user.getUsername() + suffix;
						System.out.println("新文件名：" + newFileName);// image\1478509873038.jpg
						userImgURL = path + "/images/touxiang/" + newFileName;
						// 5. 调用FileItem的write()方法，写入文件
						File file = new File(userImgURL);
						System.out.println(file.getAbsolutePath());
						fileItem.write(file);

						// 6. 调用FileItem的delete()方法，删除临时文件
						fileItem.delete();

						/*
						 * 存储到数据库时注意 1.保存源文件名称 Koala.jpg 2.保存相对路径
						 * image/1478509873038.jpg
						 */
						user.setUserImgURL("./images/touxiang/" + newFileName);

					}
				}
				JdbcDao jdbcDao = new JdbcDao();
				jdbcDao.updateUser(user);
				// session.invalidate();
				response.sendRedirect(request.getContextPath() + "/index.jsp");
			} catch (FileUploadException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}

		}

	}
}
